using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using PackTracker.Business;

public partial class Funcionarios : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected override void OnPreRenderComplete(EventArgs e)
    {
        base.OnPreRenderComplete(e);
        ApplyAuthorizationRules();
    }

    private void ApplyAuthorizationRules()
    {
        novoItem.Visible = Funcionario.CanAddObject();
        funcionarioGrid.Visible = Funcionario.CanGetObject();
        funcionarioGrid.Columns[funcionarioGrid.Columns.Count - 1].Visible = Funcionario.CanEditObject();
    }


    #region GridView Funcionario
    protected void funcionarioListDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
    {
        e.BusinessObject = getFuncionarios();//FuncionarioCollection.GetFuncionarioCollection();
    }

    protected void funcionarioGrid_CancelEdit(object sender, GridViewCancelEditEventArgs e)
    {
        //Limpa o ViewState
        ViewState.Remove("funcionarios");
        funcionarioGrid.DataBind();
    }

    protected void funcionarioGrid_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        FuncionarioCollection funcionarios = FuncionarioCollection.GetFuncionarioCollection();
        int funcionarioId = int.Parse(e.Keys["Id"].ToString());
        Funcionario funcionario = null;

        if (funcionarioId == 0)
            funcionario = Funcionario.NewFuncionario();
        else
            funcionario = Funcionario.GetFuncionario(funcionarioId);

        Csla.Data.DataMapper.Map(e.NewValues, funcionario);

        funcionario = funcionario.Save();
        funcionarios.Add(funcionario);

        //Atualiza o ViewState
        funcionarios = FuncionarioCollection.GetFuncionarioCollection();
        ViewState.Add("funcionarios", funcionarios);

        funcionarioGrid.EditIndex = -1;
        funcionarioGrid.DataBind();
    }
    #endregion

    protected void novoItem_Click(object sender, EventArgs e)
    {
        FuncionarioCollection funcionarios = getFuncionarios();
        Funcionario funcionario = Funcionario.NewFuncionario();
        funcionarios.Add(funcionario);

        //Atualiza o ViewState
        ViewState.Add("funcionarios", funcionarios);

        funcionarioGrid.DataBind();
        funcionarioGrid.EditIndex = funcionarioGrid.Rows.Count - 1;
    }

    protected FuncionarioCollection getFuncionarios()
    {
        FuncionarioCollection funcionarios = ViewState["funcionarios"] as FuncionarioCollection;

        if (funcionarios == null)
        {
            funcionarios = FuncionarioCollection.GetFuncionarioCollection();
            ViewState.Add("funcionarios", funcionarios);
        }

        return funcionarios;
    }

    protected void usuarioListDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
    {
        e.BusinessObject = UsuarioCollection.GetUsuarioCollection();
    }
}
